// #ifndef __SUBSYSTEM_ANIMAL_ENTITIES_BASE_H__
// #define __SUBSYSTEM_ANIMAL_ENTITIES_BASE_H__

// #include <vector>
// #include <map>
// #include <set>
// #include <list>
// #include <mutex>
// #include <functional>

// #include "entt/entt.hpp"
// #include "nlohmann/json.hpp"
// #include "blockingconcurrentqueue.h"
// #include "Subsystems/SubsystemAnimalEntities.h"

// #include "Engine/Point2.hpp"
// #include "Engine/Point3.hpp"
// #include "Engine/Vector3.hpp"
// #include "Engine/GameGuid.h"

// using namespace PocketSurvival::Engine;

// namespace PocketSurvival
// {
//     class SubsystemTimeOfDay;

//     class SubsystemAnimalEntitiesBase : public SubsystemAnimalEntities
//     {
//     public:

//         virtual void onTerrainChunkAdded(TerrainChunk *terrainChunk);
//         virtual void onTerrainChunkRemoved(TerrainChunk *terrainChunk);

//         virtual void update(float dt) override;
//         virtual void load(const nlohmann::json& json) override;
//         virtual void save(nlohmann::json& json) override;

//     protected:
//         void internalSaveNew();

//     protected:
//         std::set<Point2> m_chunkCoordsSet;                                  // 地图中有哪些区块已经加载
//         std::map<Point2, std::vector<AnimalEntityData*>> m_chunkAnimalsMap;  // 没有加载的区块中有哪些动物
//         std::recursive_mutex m_chunSetkMutex;

//         SubsystemTimeOfDay *m_subsystemTimeOfDay;
//     };
// }

// #endif